#ifndef _OTA_FLASH_H
#define _OTA_FLASH_H

#include <stdint.h>
#include "driver_plf.h"

// 简化的命令定义 - 只保留4个核心功能
#define OTA_FLASH_CMD_GET_VERSION    0x01    // 获取版本信息
#define OTA_FLASH_CMD_ERASE_FLASH    0x02    // 擦除Flash (参数0-2表示擦除0-2个4KB扇区)
#define OTA_FLASH_CMD_WRITE_DATA     0x03    // 写入数据
#define OTA_FLASH_CMD_READ_DATA      0x04    // 读取数据
#define OTA_FLASH_CMD_REBOOT         0x05    // 重启命令

// 简化的响应定义
#define OTA_FLASH_RSP_SUCCESS        0x00    // 成功
#define OTA_FLASH_RSP_ERROR          0x01    // 错误

// 简化的命令结构 - 固定格式，去掉复杂的union
typedef struct {
    uint8_t cmd;        // 命令码 (1字节)
    uint32_t addr;      // 地址 (4字节)
    uint16_t len;       // 长度 (2字节)
    uint8_t data[];     // 数据（变长）
} __attribute__((packed)) ota_flash_cmd_t;

// 简化的响应结构
typedef struct {
    uint8_t result;     // 结果码 (1字节)
    uint8_t cmd;        // 原命令码 (1字节)
    uint32_t addr;      // 地址 (4字节)
    uint16_t len;       // 长度 (2字节)
} __attribute__((packed)) ota_flash_rsp_t;

// 版本信息结构
typedef struct {
    uint8_t major;      // 主版本号
    uint8_t minor;      // 次版本号
    uint8_t patch;      // 补丁版本号
    uint32_t base_addr; // 基地址
} __attribute__((packed)) ota_flash_version_t;


typedef struct {
    uint8_t major;      // 主版本号
    uint8_t minor;      // 次版本号
    uint8_t patch;      // 补丁版本号

}flash_version_t;


// 函数声明
void ota_flash_init(uint8_t conidx);
void ota_flash_deinit(uint8_t conidx);
void app_otas_flash_recv_data(uint8_t conidx, uint8_t *p_data, uint16_t len);
uint16_t app_otas_flash_read_data(uint8_t conidx, uint8_t *p_data);

#endif // _OTA_FLASH_H 